/**
 * Classe complementar de SGBD.java que se dedica
 *   a um objeto de RETORNO das instrucoes executadas no BD
 *
 */

package org.jerm.Conectividade;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Vector;

public class RetornoSQL{
    PreparedStatement ps;
    ResultSet rs;
    int RecordCount;
    
    /**
     * Atribui ResultSet ao objeto de retorno
     * @param rs ResultSet a ser atribuido ao objeto de retorno
     */
    public void setResultSet(ResultSet rs){
        this.rs = rs;
    }
    
    /**
     * Atribui RecordCount ao objeto de retorno
     * @param count RecordCount a ser atribuido ao objeto de retorno
     */
    public void setRecordCount(int count){
        this.RecordCount = count;
    }

    /**
     * Atribui PreparedStatement ao objeto de retorno
     * @param ps PreparedStatement a ser atribuido ao objeto de retorno
     */
    public void setPreparedStatement(PreparedStatement ps){
        this.ps = ps;
    }
    
    /**
     * Retorna ResultSet do objeto de retorno
     * @return rs ResultSet do objeto de retorno
     */
    public ResultSet getResultSet(){
        return this.rs;
    }
    
    /**
     * Retorna RecordCount do objeto de retorno
     * @return count RecordCount do objeto de retorno
     */
    public int getRecordCount(){
        return this.RecordCount;
    }
    
    public Object[] getColunas()
    {
        Vector<String> colunas = new Vector<String>();
        ResultSetMetaData data = null;
        int num_cols = 0;
        int i;
        
        try
        {
            data = rs.getMetaData();
        }
        catch (Exception e)
        {
            
        }
        
        if(data != null)
        {
            try
            {
                num_cols = data.getColumnCount();

                for(i = 1; i <= num_cols; i++)
                {
                    try
                    {
                        colunas.add(new String(data.getColumnName(i)));
                    }
                    catch(Exception e)
                    {
                        
                    }
                }
            }
            catch(Exception e)
            {
                
            }
        }

        return (Object[]) colunas.toArray();
    }
    
    public Object[][] getValores()
    {
        Object[][] mValores = null;
        Vector<Vector<String>> valores = new Vector<Vector<String>>();
        Vector<String> aux;
        int num = 0;
        int num_cols = getColunas().length;
        int i;
        
        try
        {
            while(rs.next())
            {
                num++;
                aux = new Vector<String>();
                for(i = 1; i <= num_cols; i++)
                {
                    try
                    {
                        aux.add(rs.getString(i));
                    }
                    catch(Exception e)
                    {

                    }
                }
                valores.add(aux);
            }
        }
        catch(Exception e)
        {
            
        }
        
        mValores = new Object[num][num_cols];
        
        for(i = 0; i < num; i++)
        {
            aux = (Vector<String>) valores.elementAt(i);
            mValores[i] = aux.toArray();
        }
               
        return mValores;
    }
    
    /**
     * Retorna PreparedStatement do objeto de retorno
     * @return ps PreparedStatement do objeto de retorno
     */
    public PreparedStatement getPreparedStatement(){
        return this.ps;
    }    
    
    /**
     * Instancia classe SGBD
     */
    public RetornoSQL(){
        ps = null;
        rs = null;
        RecordCount = 0;
    }
    
}

